package ALBasicServer.ALProcess;

/*************************
 * 流程处理的监控对象
 * 目前可以对耗时、执行过程报错进行监控
 * 监控结果会在回调的重载函数中调用，区分出错步骤是通过带入的步骤名称进行区分处理的
 * @author mj
 *
 */
public interface _IALProcessMonitor 
{
    /// <summary>
    /// 返回对应过程标记的监控时长
    /// </summary>
    /// <param name="_processTag"></param>
    /// <returns></returns>
    long monitorTimeMS(String _processTag);
    /// <summary>
    /// 在超过监控时长的时候触发的回调
    /// </summary>
    /// <param name="_processTag"></param>
    void onTimeout(long _processTimeMS, String _processTag, String _exInfo);
    /// <summary>
    /// 在完成步骤的时候，如果超过监控时长时调用的完成超时回调
    /// </summary>
    /// <param name="Time"></param>
    /// <param name="_processTag"></param>
    void onTimeoutDone(long _processTimeMS, String _processTag, String _exInfo);
    /// <summary>
    /// 在出现错误的时候的步骤错误回调
    /// </summary>
    /// <param name="_processTag"></param>
    /// <param name="_ex"></param>
    void onErr(long _processTimeMS, String _processTag, String _exInfo, Exception _ex);
    /***************
     * 在某个过程失败的时候调用的事件函数,此函数调用的时候不会卡死流程。避免服务器卡死
     * @param _process
     */
    void onProcessFailStop(_AALProcess _process);
    /************
     * 在根节点的过程被终止时触发的函数
     */
    void onRootProecssStop();
    /************
     * 在根节点的过程z正常结束时触发
     */
    void onRootProecssSuc();
    /************
     * 在根节点的过程完成时执行的处理，此函数必定触发
     */
    void onRootProecssDone();
}
